home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / file.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  85 lines

  1. /*
  2.  * Wrapper functions for accessing the file_struct fd array.
  3.  */
  4.  
  5. #ifndef __LINUX_FILE_H
  6. #define __LINUX_FILE_H
  7.  
  8. #include <asm/atomic.h>
  9. #include <linux/posix_types.h>
  10. #include <linux/compiler.h>
  11. #include <linux/spinlock.h>
  12.  
  13. /*
  14.  * The default fd array needs to be at least BITS_PER_LONG,
  15.  * as this is the granularity returned by copy_fdset().
  16.  */
  17. #define NR_OPEN_DEFAULT BITS_PER_LONG
  18.  
  19. /*
  20.  * Open file table structure
  21.  */
  22. struct files_struct {
  23.         atomic_t count;
  24.         spinlock_t file_lock;     /* Protects all the below members.  Nests inside tsk->alloc_lock */
  25.         int max_fds;
  26.         int max_fdset;
  27.         int next_fd;
  28.         struct file ** fd;      /* current fd array */
  29.         fd_set *close_on_exec;
  30.         fd_set *open_fds;
  31.         fd_set close_on_exec_init;
  32.         fd_set open_fds_init;
  33.         struct file * fd_array[NR_OPEN_DEFAULT];
  34. };
  35.  
  36. extern void FASTCALL(__fput(struct file *));
  37. extern void FASTCALL(fput(struct file *));
  38.  
  39. static inline void fput_light(struct file *file, int fput_needed)
  40. {
  41.     if (unlikely(fput_needed))
  42.         fput(file);
  43. }
  44.  
  45. extern struct file * FASTCALL(fget(unsigned int fd));
  46. extern struct file * FASTCALL(fget_light(unsigned int fd, int *fput_needed));
  47. extern void FASTCALL(set_close_on_exec(unsigned int fd, int flag));
  48. extern void put_filp(struct file *);
  49. extern int get_unused_fd(void);
  50. extern void FASTCALL(put_unused_fd(unsigned int fd));
  51. struct kmem_cache_s;
  52. extern void filp_ctor(void * objp, struct kmem_cache_s *cachep, unsigned long cflags);
  53. extern void filp_dtor(void * objp, struct kmem_cache_s *cachep, unsigned long dflags);
  54.  
  55. extern struct file ** alloc_fd_array(int);
  56. extern void free_fd_array(struct file **, int);
  57.  
  58. extern fd_set *alloc_fdset(int);
  59. extern void free_fdset(fd_set *, int);
  60.  
  61. extern int expand_files(struct files_struct *, int nr);
  62.  
  63. static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd)
  64. {
  65.     struct file * file = NULL;
  66.  
  67.     if (fd < files->max_fds)
  68.         file = files->fd[fd];
  69.     return file;
  70. }
  71.  
  72. /*
  73.  * Check whether the specified fd has an open file.
  74.  */
  75. #define fcheck(fd)    fcheck_files(current->files, fd)
  76.  
  77. extern void FASTCALL(fd_install(unsigned int fd, struct file * file));
  78.  
  79. struct task_struct;
  80.  
  81. struct files_struct *get_files_struct(struct task_struct *);
  82. void FASTCALL(put_files_struct(struct files_struct *fs));
  83.  
  84. #endif /* __LINUX_FILE_H */
  85.